home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 30
/
Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso
/
Aminet
/
util
/
conv
/
CarriageRet.lha
/
CarriageRet
/
AmigavisionsLib
/
GetCommand.a
< prev
next >
Wrap
Text File
|
1999-01-03
|
2KB
|
92 lines
********************************************************************************
*
* Program: Get Command
* Filename: GetCommand.a
*
* Contents: Der durch a0.l (Adresse) angegebene
* String wird nach einem Kommando, der in der Tabelle
* (durch a1.l angegeben) steht durchsucht. Die Nummer
* des Kommandos wird in d0.l übergeben (0= kein Kommando
* gefunden). Die Tabelle hat folgenen Aufbau:
* 'CommandoString_1',0,'CommandoString_2',0...
* 'CommandoString_n',0,0
* Groß/Kleinschrift wird ignoriert.
* Im Commandostring dürfen auch Jocker verwendet werden
* wie ? und *. Diese haben folgende Bedeutung:
* * - ZEICHEN an dieser Stelle wird nicht berücksichtigt.
* ? - ZIFFER (0-9,a-f) an dieser Stelle wird erwartet.
* a0.l enthält die neue Startadresse und d1.l die neue
* Länge des Strings.
* Bei Fehler keine Änderung der Startadresse.
*
* Language: 68000 Assembler
*
* Author: Johannes R. Geiss
*
* Copyright: Amigavisions
*
* History: $HISTORY:
* 2.1 (26-Oct-91) changed JRG
* 2.0 (14-Oct-91) changed JRG
* 1.1 (10-Oct-91) changed JRG
* 1.0 (03-Oct-91) written JRG
*
* Version: $VER: GetCommand.a 2.1 (26-Oct-91)
*
********************************************************************************
*------ Exports
xdef GetCommand
********************************************************************************
SECTION GetCommand
*------ Get Argument procedure
*
* Input: a0.l Zeiger auf String
* a1.l Zeiger auf CommandoTabelle
*
* Output: d0.l CommandNummer (0= Fehler)
GetCommand
movem.l d2-d3/a2,-(a7)
moveq.l #1,d0 ; suche command
Loop1 move.l a0,a2 ; merke Stringadr
Loop2 move.b (a1)+,d2 ; CommandZeichen holen
beq.s Ende ; Command zu ende (=gefunden)
ori.b #$20,d2 ; not case sensitive
move.b (a2)+,d3 ; hole StringZeichen
ori.b #$20,d3
cmpi.b #'*',d2 ; Command = * ?
bne.s Cont7
cmpi.b #$61,d3 ; ja
bcs.s Cont6
cmpi.b #$7b,d3
bcs.s Loop2
Cont7 cmpi.b #'?',d2 ; Command = ? ?
bne.s Cont5
cmpi.b #$30,d3 ; ja
bcs.s Cont6
cmpi.b #$3a,d3
bcs.s Loop2
cmpi.b #$61,d3
bcs.s Cont6
cmpi.b #$67,d3
bcs.s Loop2
Cont5 cmp.b d3,d2 ; vergleiche Zeichen
beq.s Loop2 ; gleich
Cont6 addq.w #1,d0 ; CommandNummer +1
Loop4 tst.b (a1)+ ; bis zum Ende des Commands gehen
bne.s Loop4
tst.b (a1) ; letztes Command
bne.s Loop1 ; nein
moveq.l #0,d0 ; nichts gefunden
bra.s Out
Ende move.l a2,a0 ; end
Out movem.l (a7)+,d2-d3/a2
rts
END